
15.12.2019, 00:27
|
Аспирант
|
|
Регистрация: 15.04.2019
Сообщений: 72
|
|
БД ajax-чат не выводит сообщения
Приветствую. В базу данных все добавляется. Дамп, думаю, смысла нет прикладывать, там поля id,name,text,date. Я еще таймер повторного ajax-запроса должен был поставить, по идее, но точно не знаю, как он ставится))
<?php
//подключение к БД
function db_join(){
static $db;
if($db===null){
$db = new PDO("mysql:host=localhost;dbname=ajax_jax","root","");
$db->exec("SET USE UTF-8");
}
return $db;
}
//Вставка в БД
function db_query($name,$text){
$bd = db_join();
$sql = "INSERT INTO ajax(name,text) VALUES('$name','$text')";
$query=$bd->prepare($sql);
$query->execute();
$info = $query->errorInfo();
echo $info[2];
return $query->fetchAll();
}
if(count($_POST) > 0){
if(!empty($_POST["name"]) || !empty($_POST["text"])) {
$name = $_POST["name"];
$text = $_POST["text"];
$db = db_query($name,$text);
}
}
//Вывод из БД
function db_read(){
$bd = db_join();
$sql = "SELECT * from `ajax` ORDER BY `date` DESC";
$query=$bd->prepare($sql);
$query->execute();
$info = $query->errorInfo();
echo $info[2];
return $query->fetchAll();
}
$messages = db_read();
?>
Джаваскрипт-файл (в нем косяк, думаю)
function funcSuccess(data){
$(".message").html(data)
}
$(function(){
$("form").submit(function(event){
$.ajax({
url:"content.php",
type: "POST",
data:{name: $(".name").val(),text: $(".text").val()},
dataType:"html",
success: funcSuccess
})
})
})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Чат</title>
<style>
.message{
border:1px solid #ccc;
padding:10px;
margin-bottom:20px;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
</head>
<body>
<form method="post" id="ajaxForm">
<p>
<label for="name" style="margin-right:8px">Имя</label>
<br>
<input type="text" name="name" class="name">
</p>
<p>
<label for="text">Текст</label>
<br>
<textarea name="text" cols="21" rows="5" class="text"></textarea>
<br>
</p>
<input type="submit" class="click">
</form>
<hr>
<?php if(!empty ($messages) ){ ?>
<?php foreach($messages as $message){ ?>
<div class="message">
<p>Автор: <?= $message["name"]?>| Дата: <?= $message["date"]?></p>
<div>Сообщение: <?= nl2br($message["text"])?></div>
</div>
<?php } ?>
<?php } ?>
<script src="script2.js"></script>
</body>
</html>
Последний раз редактировалось Иса Мирзоев, 15.12.2019 в 00:31.
|
|

15.12.2019, 00:46
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Иса Мирзоев
|
$sql = "INSERT INTO ajax(name,text) VALUES('$name','$text')";
$query=$bd->prepare($sql);
|
Так нельзя, да еще в PDO, читайте об именованных метках.
Сообщение от Иса Мирзоев
|
if(count($_POST) > 0){
|
Зачем? Не пустой массив возвращает true, то есть if($_POST) { ....
А нет выборки потому, что с клиента такого запроса нет.
|
|

15.12.2019, 00:52
|
Аспирант
|
|
Регистрация: 15.04.2019
Сообщений: 72
|
|
Сообщение от laimas
|
Так нельзя, да еще в PDO, читайте об именованных метках.
Зачем? Не пустой массив возвращает true, то есть if($_POST) { ....
А нет выборки потому, что с клиента такого запроса нет.
|
Окей, что мне надо добавить? Как примерно сформировать запрос недостающий джаваскриптовый?
|
|

15.12.2019, 01:21
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Иса Мирзоев
|
Окей, что мне надо добавить?
|
Запрос, который бы сервер мог трактовать, что это запрос на выборку из базы, либо всего, либо записей по условию, либо конкретной записи и т.п.
|
|

15.12.2019, 01:23
|
Аспирант
|
|
Регистрация: 15.04.2019
Сообщений: 72
|
|
Сообщение от laimas
|
Запрос, который бы сервер мог трактовать, что это запрос на выборку из базы, либо всего, либо записей по условию, либо конкретной записи и т.п.
|
А в первом файле с 34 по 43 строку разве это не происходит?
|
|

15.12.2019, 02:14
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Да, в 45 есть вызов функции, не заметил. Но что у вас возвращает функция? Правильно, кашу: сначала делает вывод в браузер echo $info[2], а затем массив return $query->fetchAll() в никуда, так как с переменной $messages, которая получает этот массив ничего ровным счетом не происходит. Вы уж определитесь чего хотите получать, и коли массив, то это только JSON, а значит echo $info[2] удалить, и на клиенте ну никак не $(".message").html(data).
|
|

15.12.2019, 02:18
|
Аспирант
|
|
Регистрация: 15.04.2019
Сообщений: 72
|
|
Сообщение от laimas
|
Да, в 45 есть вызов функции, не заметил. Но что у вас возвращает функция? Правильно, кашу: сначала делает вывод в браузер echo $info[2], а затем массив return $query->fetchAll() в никуда, так как с переменной $messages, которая получает этот массив ничего ровным счетом не происходит. Вы уж определитесь чего хотите получать, и коли массив, то это только JSON, а значит echo $info[2] удалить, и на клиенте ну никак не $(".message").html(data).
|
В этом-то вопрос, что тогда, если не $(".message").html(data)?) На json все поменяем))
п.с. а предположим, не массив у нас, а просто строка text из БД, ее-то как вывести?)
Последний раз редактировалось Иса Мирзоев, 15.12.2019 в 02:25.
|
|

15.12.2019, 02:45
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Иса Мирзоев
|
В этом-то вопрос, что тогда, если не $(".message").html(data)?
|
Чтобы это понять, нужно забыть на время что вообще существует Ajax и JS, ибо куда проще отправлять запросы обычной формой, а результат выводить на страницу, в данном случае это так:
echo '<pre>' . print_r(db_read(), 1) . '</pre>';
Что вы собираетесь выводить как html в этом случае?
А вот когда уясните что к чему, тогда и придет понимание как отдать клиенту и что сделать на клиенте, вот тогда и наступит очередь Ajax.
|
|

15.12.2019, 02:52
|
Аспирант
|
|
Регистрация: 15.04.2019
Сообщений: 72
|
|
Сообщение от laimas
|
Чтобы это понять, нужно забыть на время что вообще существует Ajax и JS, ибо куда проще отправлять запросы обычной формой, а результат выводить на страницу, в данном случае это так:
echo '<pre>' . print_r(db_read(), 1) . '</pre>';
Что вы собираетесь выводить как html в этом случае?
А вот когда уясните что к чему, тогда и придет понимание как отдать клиенту и что сделать на клиенте, вот тогда и наступит очередь Ajax.
|
Вы говорили, что в json-е надо выводить массивы. Значит, надо сначала в php через json-encode обработать, а потом парсить в джаваскрипте, а дальше выводить. Только без понятия, что на выходе получится))
|
|

15.12.2019, 04:02
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Иса Мирзоев
|
Только без понятия, что на выходе получится
|
Еще раз - выбросить из головы JS, ajax и прочее, пока не уясните что возвращает ваша функция после выборки из базы. Для этого достаточно print_r(), var_dump(), а плюшки на клиенте типа ajax, это всего лишь способ обмена данными, а не нечто основополагающее.
|
|
|
|